home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Programming / AmigaE / Src / Tools / AmigaLib / cx.e < prev    next >
Text File  |  1995-03-20  |  2KB  |  117 lines

  1. OPT MODULE
  2.  
  3. OPT PREPROCESS
  4.  
  5. MODULE 'commodities',
  6.        'icon',
  7.        'devices/inputevent',
  8.        'libraries/commodities'
  9.  
  10. EXPORT PROC userFilter(tt, action_name, default_descr)
  11.   DEF desc=NIL
  12.   IF (iconbase=NIL) OR (cxbase=NIL) THEN RETURN NIL
  13.   IF tt THEN desc:=FindToolType(tt, action_name)
  14. ENDPROC CxFilter(IF desc THEN desc ELSE default_descr)
  15.  
  16. EXPORT PROC hotKey(description, port, id)
  17.   DEF filter
  18.   IF cxbase=NIL THEN RETURN NIL
  19.   IF filter:=CxFilter(description)
  20.     AttachCxObj(filter, CxSender(port, id))
  21.     AttachCxObj(filter, CxTranslate(NIL))
  22.     IF CxObjError(filter)
  23.       DeleteCxObjAll(filter)
  24.       filter:=NIL
  25.     ENDIF
  26.   ENDIF
  27. ENDPROC filter
  28.  
  29. EXPORT PROC freeIEvents(events:PTR TO inputevent)
  30.   DEF next
  31.   WHILE events
  32.     next:=events.nextevent
  33.     END events
  34.     events:=next
  35.   ENDWHILE
  36. ENDPROC
  37.  
  38. ENUM ERR_NONE, ERR_ESC, ERR_ANGLE
  39.  
  40. EXPORT PROC invertStringRev(str, km) HANDLE
  41.   DEF events=NIL, c, curr:PTR TO inputevent, ie:PTR TO inputevent
  42.   IF cxbase=NIL THEN RETURN NIL
  43.   IF str
  44.     IF str[]
  45.       curr:=(events:=NEW ie)
  46.       c:=str[]++
  47.       REPEAT
  48.         IF c="<"
  49.           str:=doangle(str, curr)
  50.         ELSE
  51.           IF c="\\" THEN c:=doesc(str[]++)
  52.           InvertKeyMap(c, curr, km)
  53.         ENDIF
  54.         IF c:=str[]++
  55.           curr.nextevent:=NEW ie
  56.           curr:=ie
  57.         ENDIF
  58.       UNTIL c=NIL
  59.     ENDIF
  60.   ENDIF
  61.   RETURN events
  62. EXCEPT
  63.   freeIEvents(events)
  64.   RETURN NIL
  65. ENDPROC
  66.  
  67. EXPORT PROC invertString(str, km) HANDLE
  68.   DEF events=NIL:PTR TO inputevent, c, prev:PTR TO inputevent
  69.   IF cxbase=NIL THEN RETURN NIL
  70.   IF str
  71.     IF str[]
  72.       WHILE c:=str[]++
  73.         prev:=events
  74.         NEW events
  75.         events.nextevent:=prev
  76.         IF c="<"
  77.           str:=doangle(str, events)
  78.         ELSE
  79.           IF c="\\" THEN c:=doesc(str[]++)
  80.           InvertKeyMap(c, events, km)
  81.         ENDIF
  82.       ENDWHILE
  83.     ENDIF
  84.   ENDIF
  85.   RETURN events
  86. EXCEPT
  87.   freeIEvents(events)
  88.   RETURN NIL
  89. ENDPROC
  90.  
  91. PROC doesc(c)
  92.   SELECT "u" OF c
  93.   CASE "\q", "'", "<", "\\"
  94.     RETURN c
  95.   CASE "0"
  96.     RETURN 0
  97.   CASE "n", "r"
  98.     RETURN "\b"
  99.   CASE "t"
  100.     RETURN "\t"
  101.   DEFAULT
  102.     Raise(ERR_ESC)
  103.   ENDSELECT
  104. ENDPROC
  105.  
  106. PROC doangle(str, events:PTR TO inputevent)
  107.   DEF s, c, ix:inputxpression
  108.   s:=str
  109.   WHILE s[] AND (s[]<>">") DO s++
  110.   IF c:=s[] THEN s[]:=NIL
  111.   IF ParseIX(str, ix)<>0 THEN Raise(ERR_ANGLE)
  112.   events.class:=ix.class
  113.   events.code:=ix.code
  114.   events.qualifier:=ix.qualifier
  115.   s[]++:=c
  116. ENDPROC s
  117.